No Ruby, mover-se além do caminho feliz significa passar de um raciocínio linear para uma postura defensiva onde falhas são tratadas como objetos de primeira classe em vez de catástrofes que encerram o programa.
1. A Hierarquia de Exceções
O Ruby define de antemão uma hierarquia organizada de exceções mostrada em Figura 8.1. Cada erro é uma instância de uma classe dentro desta árvore, começando pela Exception raiz. Compreender esta árvore é essencial: erros de nível de aplicação geralmente descendem de StandardError, enquanto falhas de nível de sistema (como NoMemoryError) descendem diretamente de Exception.
2. Erros como Objetos de Dados
Ao contrário de linguagens de baixo nível, onde um erro pode ser apenas um código de retorno simples, o Ruby empacota contexto—incluindo a string de mensagem e o rastreamento de execução—em um objeto formal. Isso permite que os desenvolvedores tratem interrupções em tempo de execução como dados que podem ser inspecionados e geridos por meio da herança.